package juc.blockqueue.linkedtransferqueue;

/**
 * @ClassName LinkedTransferQueueExample
 * @PackageName juc.blockqueue.linkedtransferqueue
 * @projectName myThread
 * @Description LinkedTransferQueueExample
 * @Author games
 * @Date 2025/9/4 下午1:40
 * @Version 1.0
 */
import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;

/**
 * LinkedTransferQueue 使用详解
 * LinkedTransferQueue 是一个无界的并发传输队列，它实现了 TransferQueue 接口，支持高效的元素传输操作。它是 SynchronousQueue 和 LinkedBlockingQueue 功能的结合体。
 * 基本特性
 * 无界队列：理论上容量无限制（受内存限制）
 * 传输特性：
 * 支持直接传递（transfer）操作
 * 支持普通队列操作
 * 高性能：基于链表实现，采用无锁算法优化
 * 线程安全：内部使用 CAS 操作保证多线程安全
 * 公平性：FIFO 顺序处理等待线程
 *
 *
 *
 *
 */
public class LinkedTransferQueueExample {
    public static void main(String[] args) {
        TransferQueue<Integer> queue = new LinkedTransferQueue<>();

        // 生产者线程
        Thread producer = new Thread(() -> {
            try {
                queue.transfer(1);
                System.out.println("Produced: " + 1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        // 消费者线程
        Thread consumer = new Thread(() -> {
            try {
                System.out.println("Consumed: " + queue.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        producer.start();
        consumer.start();
    }
}
